//改（更新数据）
const User = require("../models/user");

// toUpdata();

/*
    更新的返回值分析
     { ok:1 (1成功的状态) nModified: 1 实际更新数 n: 1 匹配到的记录数}

    Model.findOneAndDelete()
    Model.findOneAndRemove()
    Model.findOneAndUpdate()

    返回的都是一个模板对象
*/


//一、利用updata方法进行更新
/*
    更新后的返回信息
    1.修改成功 {"n":1,"nModified":1,"ok":1}
    2.修改失败  
        2.1 修改的东西没有变化 {"n":1,"nModified":0,"ok":1}
        2.2 修改的对象不存在 {"n":0,"nModified":0,"ok":1}
*/
async function toUpdata(){
    try{
        let updataUser = await User.updateOne({
            username:"wangwu"
        },{
            $set:{
                password:321
            }
        })
        console.log(JSON.stringify(updataUser))
    }catch(err){
        console.log(err.message)
    }

}

// findToUpdata({username:"lisi"});

//二、先找到该对象  修改该对象的model  再进行保存 ?? 
async function findToUpdata(userObj){
    try{
        let userMsg = await User.findOne(userObj);
        let updataMsg ={
            password:111
        }
        
        //userMsg.aaa=updataMsg.password;//模板中不存在的字段是不会保存到数据库中的
        userMsg.password=updataMsg.password;

        //怎么去判断是否修改成功？
        let newUser = await userMsg.save();

        //1.拿修改的数据的要修改的数据做比较？
        if(newUser.password === updataMsg.password){
            console.log("修改成功")
        }else{
            console.log("修改失败 /修改后的数据与需要修改的数据不一样")
        }

    }catch(err){
        console.log(err.message)
    }
}

//三、更新子文档
/*
    1.增加子文档中的数据
    2.修改子文档中的数据
    2.删除子文档的数据
*/ 

// toAddChild();
//增加子文档中的数据
async function toAddChild(){
    try{
        //1.1 利用push添加数据  再将model保存
        let needAddUser ={username:"wangwu"}; // 需要修改的对象
        let skillList = [{skillName:"css",skillTime:"1"},{skillName:"js",skillTime:"2"}] //需要添加的数据
        let userDoc = await User.findOne(needAddUser);
        if(!!userDoc){
            for(let item of skillList){
                userDoc.skill.push(item);  //将新的数据添加到对象子文档数组中
            }
            //怎么判断是否真的是保存进去了 ？？？
            if(!!await userDoc.save()){
                console.log("添加子文档成功");
            }else{
                console.log("添加子文档失败");
            }
        }else {
            console.log("该用户不存在")
        }
       
    }catch(err){
        console.log(err.message);
    }
}

// toChangeChild();

//修改子文档中的数据

/*
    1.修改的数据在数据库中没有数据  { n: 0, nModified: 0, ok: 1 }
    2.修改成功  { n: 1, nModified: 1, ok: 1 }
    3.修改的数据没有变化 { n: 1, nModified: 0, ok: 1 }
*/
async function toChangeChild(){
    try{
        //利用updata
        let changeChildMsg= await User.updateOne({username:"wangwu","skill.skillName":"h5"},{
            "skill.$.skillTime":5,
        })
        console.log(changeChildMsg);
    }catch(err){
        console.log(err.message)
    }
}


//删除子文档中的数据
toDelChild();

/*
    UpdateOne
    1.删除成功 { n: 1, nModified: 1, ok: 1 }
    2.删除没有的数据  { n: 1, nModified: 0, ok: 1 }
*/
async function toDelChild(){
    try{
        
        let newUser = await User.UpdateOne({
            username:"wangwu",
        },{
            $pull:{
                skill:{
                    skillName:"nodejs"
                }
            }
        });
        console.log(newUser)    
    }catch(err){
        console.log(err.message)
    }
}

